#include "mainwindow.h"
#include "ui_mainwindow.h"
#include  <qmessagebox.h>
#include <QTextCodec>
#include <QtSql>
#include <string.h>
#include <stdlib.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindowClass)
{
    ui->setupUi(this);

    connect(ui->buttonMkTable,SIGNAL(triggered()), this, SLOT(funcMkTable()));
    connect(ui->buttonClean,SIGNAL(triggered()), this, SLOT(funcClean()));
    connect(ui->buttonSetSize,SIGNAL(triggered()), this, SLOT(funcSetSize()));
    connect(ui->buttonWarning,SIGNAL(triggered()), this, SLOT(funcWarning()));
    connect(ui->buttonDBConnect,SIGNAL(triggered()), this, SLOT(databaseConnect()));
    connect(ui->buttonDBDisconnect,SIGNAL(triggered()), this, SLOT(databaseDisconnect()));
    connect(ui->buttonGetDBData,SIGNAL(clicked()), this, SLOT(databaseSearch()));
    connect(ui->actionAbout,SIGNAL(triggered()), this, SLOT(funcAbout()));
    connect(ui->actionClose,SIGNAL(triggered()), this, SLOT(close()));

    connect(ui->searchSymbol,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));
    connect(ui->searchPolarization,SIGNAL(currentIndexChanged(int)),this, SLOT(databaseSearch()));
    connect(ui->searchImax,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));
    connect(ui->searchIimp,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));
    connect(ui->searchUmax,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));
    connect(ui->searchf,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));
    connect(ui->searcht,SIGNAL(textChanged(QString)),this, SLOT(databaseSearch()));

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

    databaseConnect();
    funcMkTable();
    funcClean();
}

void MainWindow::funcMkTable(){
    ui->dataField->setColumnCount(7);
    ui->dataField->setHorizontalHeaderLabels(QStringList() << "Symbol" << "Polaryzacja" << "I max.[A]" << "I imp.[A]" << "U max.[V]" << "f[Hz]" << "t[s]");
    ui->dataField->sortByColumn(0);
    ui->dataField->resizeColumnsToContents();
}
void MainWindow::funcClean(){
    ui->dataField->clear();
    ui->dataField->setRowCount(0);
    funcMkTable();
}
void MainWindow::funcSetSize(){
    ui->dataField->resizeColumnsToContents();
}
void MainWindow::funcWarning(){
    QMessageBox msgBox(QMessageBox::Warning, QString::fromUtf8("I kto pozwolil klikac?"),QString::fromUtf8("Pozwolił ktoś dotknąć? No? Pytam Ja się!<br>Czujesz się winny?"), 0, this);
     msgBox.addButton(QString::fromUtf8("Okropnie - czy kiedykolwiek mi wybaczysz?"), QMessageBox::AcceptRole);
     msgBox.addButton(QString::fromUtf8("Ani trochę - spadaj nędzniku!"), QMessageBox::RejectRole);
     if (msgBox.exec() == QMessageBox::AcceptRole){
	QMessageBox msgBox(QMessageBox::Information, QString::fromUtf8("Pouczenie"),QString::fromUtf8("\"17. Z powodu jego niegodziwej chciwości gniewałem się i smagałem go, ukryłem się za moim gniewem, lecz on, odstępca, poszedł drogą swojego serca.\""), 0, this);
	msgBox.exec();
    }else{
	QMessageBox msgBox(QMessageBox::Information, QString::fromUtf8("Pouczenie"),QString::fromUtf8("\"Spieprzaj dziadu!\""), 0, this);
	msgBox.exec();
    }
}
void MainWindow::databaseConnect(){
    database.setFileName("baza.csv");
    if (!database.open(QIODevice::ReadOnly | QIODevice::Text)){
	statusBar()->showMessage(QString::fromUtf8("Pliku nie otwarto. Sprawdź czy baza danych istnieje i posiadasz do niej prawa."),2000);
	databaseStatus=0;
	return;
    }else{
	statusBar()->showMessage(QString::fromUtf8("Plik bazy danych otwarto. Baza załadowana... "),2000);
	databaseStatus=1;
    }
}
void MainWindow::databaseDisconnect(){
    databaseStatus=0;
    database.close();
    statusBar()->showMessage(QString::fromUtf8("Plik bazy danych zamknięto... "),2000);
}
void MainWindow::databaseSearch(){
    if(databaseStatus==1){
	ui->dataField->setSortingEnabled(0);
	int k=0;
	QStringList file;
	for(int i=0;!database.atEnd();i++){
	    file << database.readLine();
	    k++;
	}
	//ui->dataField->setRowCount(k);
	QTableWidgetItem *tableItem[k][7];
	int l=0;
	for(int i=0;i<k;i++){
	    QStringList list = file[i].split(";");
	    if( list[0].contains(ui->searchSymbol->text(),Qt::CaseInsensitive)
		    && (list[1].contains(ui->searchPolarization->itemText(ui->searchPolarization->currentIndex()),Qt::CaseInsensitive) || ui->searchPolarization->itemText(ui->searchPolarization->currentIndex()).contains("Obojętne"))
		    && list[2].toFloat()>=ui->searchImax->text().toFloat()
		    && list[3].toFloat()>=ui->searchIimp->text().toFloat()
		    && list[4].toFloat()>=ui->searchUmax->text().toFloat()
		    && list[5].toFloat()>=ui->searchf->text().toFloat()
		    && (list[6].toFloat()<=ui->searcht->text().toFloat() || ui->searcht->text().isEmpty())
		   ){
		ui->dataField->setRowCount(l+1);
		for (int j=0; j<7; j++){
		    //qDebug() << i << j << list[j];
		    tableItem[i][j] = new QTableWidgetItem();
		    tableItem[i][j]->setText(list[j]);
		    ui->dataField->setItem(l, j, tableItem[i][j]);
		}
		l++;
	    }
	}
	ui->dataField->setSortingEnabled(1);
    }else{
	QMessageBox msgBox(QMessageBox::Information, QString::fromUtf8("Uwaga"),QString::fromUtf8("Baza danych nie została załadowana. Nie mogę prowadzić wyszukiwania."), 0, this);
	msgBox.exec();
    }

    funcSetSize();
}
void MainWindow::funcAbout(){
    QMessageBox msgBox(QMessageBox::Information, QString::fromUtf8("O autorach..."),QString::fromUtf8("...a konkretniej o takim jednym, co się uczyć chciał...<br>pawel@pid.pl<br>Pozdrawiam,<br>Paweł"), 0, this);
    msgBox.setIcon(QMessageBox::Information);
    msgBox.exec();
}


MainWindow::~MainWindow()
{
    delete ui;
}
